home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / xarchie-2.0.9 / ftp.h < prev    next >
C/C++ Source or Header  |  1995-06-18  |  10KB  |  268 lines

  1. /*
  2.  * ftp.h : Definitions for the asynchronous FTP client
  3.  *
  4.  * George Ferguson, ferguson@cs.rochester.edu, 23 Apr 1993.
  5.  * 28 Apr 1993: Changed constant from _FTP_H to _XA_FTP_H.
  6.  */
  7.  
  8. #ifndef _XA_FTP_H
  9. #define _XA_FTP_H_
  10.  
  11. #include <sys/types.h>
  12. #include <netinet/in.h>
  13.  
  14. #if NeedFunctionPrototypes
  15. struct _FtpContext;
  16. #endif
  17.  
  18. typedef void (*FtpCallbackProc)(
  19. #if NeedFunctionPrototypes
  20.     struct _FtpContext* ftpc
  21. #endif
  22. );
  23.  
  24. typedef void (*FtpTraceProc)(
  25. #if NeedFunctionPrototypes
  26.     struct _FtpContext* ftpc,
  27.     int who,        /* 0 => recvd, non-0 => sent */
  28.     char *text
  29. #endif
  30. );
  31.  
  32. typedef struct _FtpContext {
  33.     /* Connection parameters */
  34.     char *hostname;        /* hostname to contact */
  35.     unsigned short servport;    /* port of ftp service */
  36.     char **h_addr_list;        /* list of host addresses to try */
  37.     char **this_addr;        /* which address are we trying */
  38.     struct sockaddr_in saddr;    /* address of the control connection */
  39.     /* Connection state */
  40.     int state;            /* state of FTP process */
  41.     int iostate;        /* connecting, reading, writing, or ready */
  42.     int reply_state;        /* sub-state during reply parsing */
  43.     int saved_state;        /* saved sub-state during IAC parsing */
  44.     char *cmd;            /* pending part of cmd to send */
  45.     /* Control connection */
  46.     int    ctrl;            /* file descriptor of control connection */
  47.     int    retcode;        /* code of last reply */
  48.     int    tmpcode;        /* scratchpad for continuation lines */
  49.     char reply[BUFSIZ<<4];     /* text of last reply */
  50.     int reply_len;        /* length of reply (so far) */
  51.     /* User transfer params */
  52.     char *user;            /* usually anonymous */
  53.     char *pass;            /* usually user@host.dom */
  54.     char *cwd;            /* remote directory */
  55.     char *wd;            /* the part of cwd remaining to do */
  56.     char *local_dir;        /* directory for local files */
  57.     int    type;            /* current transfer mode */
  58.     int    stripcr;        /* 1 if want to remove CR from ASCII files */
  59.     int prompt;            /* 1 to prompt during transfers */
  60.     int filecmd;        /* FTP_GET or FTP_PUT */
  61.     char **files;        /* array of files to GET or PUT */
  62.     int num_files;        /* how many files */
  63.     int this_file;        /* which file are we working on */
  64.     int this_size;        /* how big is it (if we know) */
  65.     FtpTraceProc trace;        /* called to trace transactions */
  66.     FtpCallbackProc done;    /* called when connection finished */
  67.     FtpCallbackProc done1;    /* called when each file transfer finished */
  68.     /* Data connection */
  69.     int    port;            /* the socket on which we will acccept(2) */
  70.     int    data;            /* a data connection established */
  71.     int local_fd;        /* fd for local copy of file (read or write) */
  72.     int num_bytes;        /* bytes transferred this file */
  73. } FtpContext;
  74.  
  75. extern FtpContext *ftpNewContext(
  76. #if NeedFunctionPrototypes
  77.     char *hostname, char *user, char *pass, char *cwd, char *local_dir,
  78.     int type, int stripcr, int prompt,
  79.     int filecmd, char **files, int num_files,
  80.     FtpTraceProc trace, FtpCallbackProc done1, FtpCallbackProc done
  81. #endif
  82. );
  83.  
  84. extern void ftpStart(
  85. #if NeedFunctionPrototypes
  86.     FtpContext *ftpc
  87. #endif
  88. );
  89.  
  90. extern void ftpAbort(
  91. #if NeedFunctionPrototypes
  92.     FtpContext *ftpc
  93. #endif
  94. );
  95.  
  96. extern void ftpFreeContext(
  97. #if NeedFunctionPrototypes
  98.     FtpContext *ftpc
  99. #endif
  100. );
  101.  
  102. /*
  103.  * Filecmd codes
  104.  */
  105. #define FTP_GET 1
  106. #define FTP_PUT 2
  107.  
  108. /* Values for state field of FtpContext */
  109. #define FTPS_OPEN        10
  110. #define FTPS_CONNECT        11
  111. #define FTPS_CONNECTED        12
  112. #define FTPS_USER        13
  113. #define FTPS_PASS        14
  114. #define FTPS_CWD        15
  115. #define FTPS_TYPE        16
  116. #define FTPS_READY        17
  117. #define FTPS_PORT        18
  118. #define FTPS_GETPUT        19
  119. #define FTPS_TRANSFER        20
  120. #define FTPS_EOF        21
  121. #define FTPS_QUIT        22
  122. #define FTPS_ABORT        23
  123. #define FTPS_ABORT2        24
  124.  
  125. /* Values for reply_state field of FtpContext */
  126. #define FTPS_REPLY_CODE        101
  127. #define FTPS_REPLY_CONT        102
  128. #define FTPS_REPLY_LAST        103
  129. #define FTPS_REPLY_MORE        104
  130. #define FTPS_REPLY_CHCK        105
  131. #define FTPS_REPLY_IAC1        106
  132. #define FTPS_REPLY_IAC2        107
  133. #define FTPS_REPLY_IAC3        108
  134.  
  135. /*
  136.  * Telnet codes
  137.  */
  138. #ifndef NO_ARPA_H
  139. # include <arpa/ftp.h>
  140. # include <arpa/telnet.h>
  141. #else
  142.   /* <arpa/ftp.h>
  143. # define TYPE_A          1       /* ASCII */
  144. # define TYPE_E          2       /* EBCDIC */
  145. # define TYPE_I          3       /* image */
  146. # define TYPE_L          4       /* local byte size */
  147.   /* <arpa/telnet.h> */
  148. # define IAC     255             /* interpret as command: */
  149. # define DONT    254             /* you are not to use option */
  150. # define DO      253             /* please, you use option */
  151. # define WONT    252             /* I won't use option */
  152. # define WILL    251             /* I will use option */
  153. # define IP      244             /* interrupt process--permanently */
  154. # define DM      242             /* data mark--for connect. cleaning */
  155. #endif /* !NO_ARPA_H */
  156.  
  157. /*
  158.  * FTP reply codes, per RFC 959
  159.  */
  160.  
  161. /* First digit */
  162. #define FTP_REPLY_TYPE(X)    (X/100)
  163. #define FTP_REPLY_PRELIM(X)    (FTP_REPLY_TYPE(X) == 1) /* +ve preliminary  */
  164. #define FTP_REPLY_COMPLETE(X)    (FTP_REPLY_TYPE(X) == 2) /* +ve complete     */
  165. #define FTP_REPLY_CONTINUE(X)    (FTP_REPLY_TYPE(X) == 3) /* +ve intermediate */
  166. #define FTP_REPLY_TRANSIENT(X)    (FTP_REPLY_TYPE(X) == 4) /* -ve transient    */
  167. #define FTP_REPLY_ERROR(X)    (FTP_REPLY_TYPE(X) == 5) /* -ve permanent    */
  168. #define FTP_REPLY_OK(X)        (X < 400)
  169. #define FTP_REPLY_ERR(X)    (X >= 400)
  170.  
  171. /* Second digit */
  172. #define FTP_REPLY_FUNCTION(X)    ((X%100)/10)
  173. #define FTP_REPLY_SYNTAX(X)    (FTP_REPLY_FUNCTION(X) == 0) /* syntax       */
  174. #define FTP_REPLY_INFO(X)    (FTP_REPLY_FUNCTION(X) == 1) /* information  */
  175. #define FTP_REPLY_CONN(X)    (FTP_REPLY_FUNCTION(X) == 2) /* connections  */
  176. #define FTP_REPLY_AUTH(X)    (FTP_REPLY_FUNCTION(X) == 3) /*authentication*/
  177. #define FTP_REPLY_UNSPEC(X)    (FTP_REPLY_FUNCTION(X) == 4) /* unspecified  */
  178. #define FTP_REPLY_FILE(X)    (FTP_REPLY_FUNCTION(X) == 5) /* file system  */
  179.  
  180. /* Third digit */
  181. #define FTP_REPLY_SPECIFIC(X)    (X%10)
  182.  
  183. /* Reply Codes by Function Groups (comment text from RFC959) */
  184. #define FTP_COMMAND_OK        200 /* Command okay. */
  185. #define FTP_SYNTAX_ERROR    500 /* Syntax error, command unrecognized.
  186.                        This may include errors such as
  187.                        command line too long. */
  188. #define FTP_PARM_SYNTAX_ERROR    501 /* Syntax error in parameters or
  189.                        arguments. */
  190. #define FTP_CMD_NOT_NEEDED    202 /* Command not implemented, superfluous
  191.                        at this site. */
  192. #define FTP_CMD_NOT_IMPL    502 /* Command not implemented. */
  193. #define FTP_BAD_CMD_SEQ        503 /* Bad sequence of commands. */
  194. #define FTP_CMD_PARM_NOT_IMPL    504 /* Command not implemented for that
  195.                        parameter. */
  196.  
  197. #define FTP_RESTART_MARKER    110 /* Restart marker reply.
  198.                        In this case, the text is exact and not
  199.                        left to the particular implementation;
  200.                        it must read:
  201.                            MARK yyyy = mmmm
  202.                        Where yyyy is User-process data stream
  203.                        marker, and mmmm server's equivalent
  204.                        marker (note the spaces between markers
  205.                        and "="). */
  206. #define FTP_SYS_STATUS        211 /* System status, or system help reply. */
  207. #define FTP_DIR_STATUS        212 /* Directory status. */
  208. #define FTP_FILE_STATUS        213 /* File status. */
  209. #define FTP_HELP_MSG        214 /* Help message.
  210.                        On how to use the server or the meaning
  211.                        of a particular non-standard command.
  212.                        This reply is useful only to the human
  213.                        user. */
  214. #define FTP_SYS_NAME        215 /* NAME system type.
  215.                        Where NAME is an official system name
  216.                        from the list in the Assigned Numbers
  217.                        document. */
  218. #define FTP_SERVICE_RDY_TIME    120 /* Service ready in nnn minutes. */
  219. #define FTP_SERVICE_RDY_USER    220 /* Service ready for new user. */
  220. #define FTP_SERVICE_CLOSING     221 /* Service closing control connection.
  221.                        Logged out if appropriate. */
  222. #define FTP_SERVICE_UNAVAILABLE    421 /* Service not available, closing control
  223.                        connection. This may be a reply to any
  224.                        command if the service knows it must
  225.                        shut down. */
  226. #define FTP_TRANSFER_STARTING    125 /* Data connection already open; transfer
  227.                        starting. */
  228. #define FTP_DATA_OPEN        225 /* Data connection open; no transfer in
  229.                        progress. */
  230. #define FTP_DATA_FAILED        425 /* Can't open data connection. */
  231. #define FTP_DATA_CLOSE_OK    226 /* Closing data connection.
  232.                        Requested file action successful (for
  233.                        example, file transfer or file abort).*/
  234. #define FTP_DATA_CLOSE_ABORT    426 /* Connection closed; transfer aborted. */
  235. #define FTP_ENTERING_PASSIVE    227 /* Entering Passive Mode
  236.                        (h1,h2,h3,h4,p1,p2). */
  237.  
  238. #define FTP_LOGIN_OK        230 /* User logged in, proceed. */
  239. #define FTP_LOGIN_ERR        530 /* Not logged in. */
  240. #define FTP_LOGIN_NEED_PASSWD    331 /* User name okay, need password. */
  241. #define FTP_LOGIN_NEED_ACCT    332 /* Need account for login. */
  242. #define FTP_FILE_NEED_ACCT    532 /* Need account for storing files. */
  243.  
  244. #define FTP_DATACONN_OPEN    150 /* File status okay; about to open data
  245.                        connection. */
  246. #define FTP_FILE_ACTION_OK    250 /* Requested file action okay, completed.*/
  247. #define FTP_PATHNAME_CREATED    257 /* "PATHNAME" created. */
  248. #define FTP_FILE_ACTION_PENDING    350 /* Requested file action pending further
  249.                        information. */
  250. #define FTP_FILE_UNAVAILABLE    450 /* Requested file action not taken.
  251.                        File unavailable (e.g., file busy). */
  252. #define FTP_ACTION_NOT_TAKEN    550 /* Requested action not taken.
  253.                        File unavailable (e.g., file not found,
  254.                        no access). */
  255. #define FTP_ABORTED_LOCAL_ERR    451 /* Requested action aborted. Local error
  256.                        in processing. */
  257. #define FTP_ABORTED_PAGE_TYPE    551 /* Requested action aborted. Page type
  258.                        unknown. */
  259. #define FTP_INSUFFICIENT_SPACE    452 /* Requested action not taken.
  260.                        Insufficient storage space in system.*/
  261. #define FTP_EXCEEDED_ALLOCATION    552 /* Requested file action aborted.
  262.                        Exceeded storage allocation (for
  263.                        current directory or dataset). */
  264. #define FTP_BAD_FILENAME    553 /* Requested action not taken.
  265.                        File name not allowed. */
  266.  
  267. #endif /* !_XA_FTP_H */
  268.